package com.innoking.docsys.utils;

import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;

import java.io.IOException;

/**
 * 
 * @ClassName: FastDfsClient
 * @Description: TODO
 * @author 王小龙
 * @version 创建时间：2017年12月18日 下午2:45:28
 *
 */
public class FastDfsClient {

	private TrackerClient trackerClient = null;
	private TrackerServer trackerServer = null;
	private StorageServer storageServer = null;
	private StorageClient1 storageClient = null;
	
	public FastDfsClient(String conf) throws Exception {
		if (conf.contains("classpath:")) {
			conf = conf.replace("classpath:", this.getClass().getResource("/").getPath());
		}
		ClientGlobal.init(conf);
		trackerClient = new TrackerClient();
		trackerServer = trackerClient.getConnection();
		storageServer = null;
		storageClient = new StorageClient1(trackerServer, storageServer);
	}
	
	/**
	 * 上传文件方法
	 * <p>Title: uploadFile</p>
	 * <p>Description: </p>
	 * @param fileName 文件全路径
	 * @param extName 文件扩展名，不包含（.）
	 * @param metas 文件扩展信息
	 * @return
	 * @throws Exception
	 */
	public String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception {
		String result = storageClient.upload_file1(fileName, extName, metas);
		return result;
	}
	
	public String uploadFile(String fileName) throws Exception {
		return uploadFile(fileName, null, null);
	}
	
	public String uploadFile(String fileName, String extName) throws Exception {
		return uploadFile(fileName, extName, null);
	}
	
	/**
	 * 上传文件方法
	 * <p>Title: uploadFile</p>
	 * <p>Description: </p>
	 * @param fileContent 文件的内容，字节数组
	 * @param extName 文件扩展名
	 * @param metas 文件扩展信息
	 * @return
	 * @throws Exception
	 */
	public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) throws Exception {
		
		String result = storageClient.upload_file1(fileContent, extName, metas);
		return result;
	}
	
	public String uploadFile(byte[] fileContent) throws Exception {
		return uploadFile(fileContent, null, null);
	}
	
	public String uploadFile(byte[] fileContent, String extName) throws Exception {
		return uploadFile(fileContent, extName, null);
	}
	
	/**
	 * 删除文件
	 * @param fileName 文件服务器保存的地址
	 * @return
	 * @throws IOException
	 * @throws MyException
	 */
	public int deleteFile(String fileName) {
		try {
			return storageClient.delete_file1(fileName);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (MyException e) {
			e.printStackTrace();
		}
		return 1;
	}
	
	/**
	 * 下载文件
	 * @param fileName  文件服务器中的文件名
	 * @param local_filename 下载到本地的文件名
	 * @return
	 * @throws IOException
	 * @throws MyException
	 */
	public int downloadFile(String fileName,String local_filename) throws IOException, MyException{
		return storageClient.download_file1(fileName, local_filename);
	}
	/**
	 * 下载文件
	 * @param fileName  文件服务器中的文件名
	 * @return
	 * @throws IOException
	 * @throws MyException
	 */
	public byte[] getBytedownloadFile(String fileName) throws IOException, MyException{
		return storageClient.download_file1(fileName);
	}
}
